#region << 版 本 注 释 >>
/*----------------------------------------------------------------
 * 版权所有 (c) 2025   保留所有权利。
 * CLR版本：4.0.30319.42000
 * 机器名称：DESKTOP-GLJ2Q8J
 * 公司名称：
 * 命名空间：AutoCAD.EntityTools.RegistryManage
 * 唯一标识：c67368dd-1fb4-4453-aa10-4d31344d581e
 * 文件名：AddinRegistrationService
 * 当前用户域：DESKTOP-GLJ2Q8J
 * 
 * 创建者： Guo_79991
 * 电子邮箱：xxxx@hotmail.com
 * 创建时间：2025/9/1 18:56:17
 * 版本：V1.0.0
 * 描述：
 *
 * ----------------------------------------------------------------
 * 修改人：
 * 时间：
 * 修改说明：
 *
 * 版本：V1.0.1
 *----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>

using AutoCAD.EntityTools.Config;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Xml.Serialization;

namespace AutoCAD.EntityTools.RegistryManage
{
    /// <summary>
    /// AddinRegistrationService 的摘要说明
    /// </summary>
    public class AddinRegistrationService
    {
        private readonly AutoCadRegistry _autoCadRegistry;

        public AddinRegistrationService()
        {
            _autoCadRegistry = new AutoCadRegistry();


            //var dllPath = Path.Combine(ConfigPath.Dllfloder, "Acdbmgd.dll");
            //if (!File.Exists(dllPath))
            //{
            //    Console.WriteLine($"未加载到dll，没有找到文件 ---{dllPath} ---");
            //    return;
            //}
            //Assembly.LoadFrom(dllPath);
        }

        public bool RegisterAddin(string addinName, string description, string filePath)
        {
            Console.WriteLine("注册中...");

            try
            {
                // 获取所有AutoCAD版本
                var versions = new ObservableCollection<AutoCadVersion>(_autoCadRegistry.GetVersions());

                // 获取当前工作目录并构建完整路径
                string currentDirectory = Directory.GetCurrentDirectory();
                //string filePath = Path.Combine(currentDirectory, dllFileName);

                Console.WriteLine($"插件路径: {filePath}");

                // 创建Addin模型
                AddinModel addin = new AddinModel
                {
                    Name = addinName,
                    Description = description,
                    Path = filePath
                };

                Console.WriteLine($"插件信息: {addin.Name}, {addin.Description}, {addin.Path}");

                // 序列化到XML（可选，用于调试）
                SerializeAddinToXml(addin, "AddinModel.xml");

                // 为每个AutoCAD版本注册插件
                bool allSuccess = true;
                foreach (var version in versions)
                {
                    Console.WriteLine($"正在安装到: {version.VersionName} ({version.RegistryVersion})");

                    var result = _autoCadRegistry.InstallRegistry(addin, version);
                    if (!result)
                    {
                        Console.Error.WriteLine($"插件 {addin.Name} 在 {version.VersionName} 中安装失败");
                        allSuccess = false;
                    }
                    else
                    {
                        Console.WriteLine($"在 {version.VersionName} 中安装成功");
                    }
                }

                return allSuccess;
            }
            catch (Exception ex)
            {
                Debug.Print(ex.Message);
                Console.WriteLine($"注册表错误: {ex.Message}");
                return false;
            }
        }

        private void SerializeAddinToXml(AddinModel addin, string xmlFilePath)
        {
            try
            {
                XmlSerializer serializer = new XmlSerializer(typeof(AddinModel));
                using (StreamWriter writer = new StreamWriter(xmlFilePath))
                {
                    serializer.Serialize(writer, addin);
                }
                Console.WriteLine($"插件信息已序列化到: {xmlFilePath}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"序列化失败: {ex.Message}");
            }
        }
    }
}